<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>开源的物联网平台thingsboard部署 | 仲灏小栈</title>
    <meta name="generator" content="VuePress 1.8.0">
    <link rel="icon" href="/img/favicon.ico">
    <meta name="description" content="专注web全栈学习与总结。JavaScript,js,ES6,TypeScript,vue,python,css3,html5,Node,git,github等技术文章。">
    <meta name="keywords" content="前端博客,个人技术博客,前端,前端开发,前端框架,web前端,前端面试题,技术文档,学习,面试,JavaScript,js,ES6,TypeScript,vue,python,css3,html5,Node,git,github,markdown">
    <meta name="baidu-site-verification" content="code-5CGlqw1B4p">
    <meta name="google-site-verification" content="PbO8RiLRwDnNwqNFNGnaxZnEFB3CqcGMCGoloYfQXV0">
    <meta name="theme-color" content="#11a8cd">
    
    <link rel="preload" href="/assets/css/0.styles.15972595.css" as="style"><link rel="preload" href="/assets/js/app.2005d9cf.js" as="script"><link rel="preload" href="/assets/js/2.26fadcea.js" as="script"><link rel="preload" href="/assets/js/61.bbb7862b.js" as="script"><link rel="prefetch" href="/assets/js/10.0a7a4ca4.js"><link rel="prefetch" href="/assets/js/100.3309ce28.js"><link rel="prefetch" href="/assets/js/101.ac045b1a.js"><link rel="prefetch" href="/assets/js/102.e80bc311.js"><link rel="prefetch" href="/assets/js/103.bf660db8.js"><link rel="prefetch" href="/assets/js/104.b26aecd4.js"><link rel="prefetch" href="/assets/js/105.0e9ab80d.js"><link rel="prefetch" href="/assets/js/106.b590426c.js"><link rel="prefetch" href="/assets/js/107.5bf74c11.js"><link rel="prefetch" href="/assets/js/108.ffdc48f3.js"><link rel="prefetch" href="/assets/js/109.8da9360f.js"><link rel="prefetch" href="/assets/js/11.d9ff276d.js"><link rel="prefetch" href="/assets/js/110.3986bd59.js"><link rel="prefetch" href="/assets/js/111.1522ded7.js"><link rel="prefetch" href="/assets/js/12.1fe7afa3.js"><link rel="prefetch" href="/assets/js/13.5e3a6c9a.js"><link rel="prefetch" href="/assets/js/14.541bbe3d.js"><link rel="prefetch" href="/assets/js/15.f7a50163.js"><link rel="prefetch" href="/assets/js/16.2f792024.js"><link rel="prefetch" href="/assets/js/17.a1b6c76e.js"><link rel="prefetch" href="/assets/js/18.44579087.js"><link rel="prefetch" href="/assets/js/19.4ea5fdf4.js"><link rel="prefetch" href="/assets/js/20.e975ae71.js"><link rel="prefetch" href="/assets/js/21.8f6a653b.js"><link rel="prefetch" href="/assets/js/22.f7fe055a.js"><link rel="prefetch" href="/assets/js/23.e404dad6.js"><link rel="prefetch" href="/assets/js/24.fe3bc22e.js"><link rel="prefetch" href="/assets/js/25.85d2cc13.js"><link rel="prefetch" href="/assets/js/26.9f14e07f.js"><link rel="prefetch" href="/assets/js/27.d49bdf6c.js"><link rel="prefetch" href="/assets/js/28.72ba52cd.js"><link rel="prefetch" href="/assets/js/29.2e392833.js"><link rel="prefetch" href="/assets/js/3.7675493a.js"><link rel="prefetch" href="/assets/js/30.b69d63e5.js"><link rel="prefetch" href="/assets/js/31.c99d1817.js"><link rel="prefetch" href="/assets/js/32.6d83d1c4.js"><link rel="prefetch" href="/assets/js/33.bebcb9b5.js"><link rel="prefetch" href="/assets/js/34.8f621c93.js"><link rel="prefetch" href="/assets/js/35.6606e0ad.js"><link rel="prefetch" href="/assets/js/36.75614371.js"><link rel="prefetch" href="/assets/js/37.4ce9e497.js"><link rel="prefetch" href="/assets/js/38.95263d32.js"><link rel="prefetch" href="/assets/js/39.a86d2616.js"><link rel="prefetch" href="/assets/js/4.d95386e0.js"><link rel="prefetch" href="/assets/js/40.e7f88f7e.js"><link rel="prefetch" href="/assets/js/41.644d2886.js"><link rel="prefetch" href="/assets/js/42.a9398322.js"><link rel="prefetch" href="/assets/js/43.50ffced2.js"><link rel="prefetch" href="/assets/js/44.8a76f778.js"><link rel="prefetch" href="/assets/js/45.d825d0e7.js"><link rel="prefetch" href="/assets/js/46.e692b0d4.js"><link rel="prefetch" href="/assets/js/47.4a5600e2.js"><link rel="prefetch" href="/assets/js/48.b58a480d.js"><link rel="prefetch" href="/assets/js/49.c31716d2.js"><link rel="prefetch" href="/assets/js/5.77e36999.js"><link rel="prefetch" href="/assets/js/50.5c5f704f.js"><link rel="prefetch" href="/assets/js/51.3b090e9a.js"><link rel="prefetch" href="/assets/js/52.a2846fa7.js"><link rel="prefetch" href="/assets/js/53.08563d97.js"><link rel="prefetch" href="/assets/js/54.abaa1adf.js"><link rel="prefetch" href="/assets/js/55.79ddef5b.js"><link rel="prefetch" href="/assets/js/56.8fc21a8e.js"><link rel="prefetch" href="/assets/js/57.a7a7e91e.js"><link rel="prefetch" href="/assets/js/58.395fd83e.js"><link rel="prefetch" href="/assets/js/59.b2899c75.js"><link rel="prefetch" href="/assets/js/6.ed7c7deb.js"><link rel="prefetch" href="/assets/js/60.12cf70af.js"><link rel="prefetch" href="/assets/js/62.ec59ffa8.js"><link rel="prefetch" href="/assets/js/63.f4d6c257.js"><link rel="prefetch" href="/assets/js/64.9e382220.js"><link rel="prefetch" href="/assets/js/65.94ab71cc.js"><link rel="prefetch" href="/assets/js/66.33c7d856.js"><link rel="prefetch" href="/assets/js/67.6d9b7cc8.js"><link rel="prefetch" href="/assets/js/68.63f4486e.js"><link rel="prefetch" href="/assets/js/69.fd717229.js"><link rel="prefetch" href="/assets/js/7.05321aa0.js"><link rel="prefetch" href="/assets/js/70.b37bad49.js"><link rel="prefetch" href="/assets/js/71.bf0f14a3.js"><link rel="prefetch" href="/assets/js/72.37e36450.js"><link rel="prefetch" href="/assets/js/73.d6b8cf7a.js"><link rel="prefetch" href="/assets/js/74.66cae9eb.js"><link rel="prefetch" href="/assets/js/75.f56a19ed.js"><link rel="prefetch" href="/assets/js/76.e9d0a86e.js"><link rel="prefetch" href="/assets/js/77.6f880a29.js"><link rel="prefetch" href="/assets/js/78.bd4f38f3.js"><link rel="prefetch" href="/assets/js/79.f22e09a9.js"><link rel="prefetch" href="/assets/js/8.58ff24c5.js"><link rel="prefetch" href="/assets/js/80.c7a75ffd.js"><link rel="prefetch" href="/assets/js/81.60c66414.js"><link rel="prefetch" href="/assets/js/82.1cac8d03.js"><link rel="prefetch" href="/assets/js/83.dca1d99b.js"><link rel="prefetch" href="/assets/js/84.8c41ec82.js"><link rel="prefetch" href="/assets/js/85.af3896bc.js"><link rel="prefetch" href="/assets/js/86.b30b6900.js"><link rel="prefetch" href="/assets/js/87.b51ef412.js"><link rel="prefetch" href="/assets/js/88.d3803962.js"><link rel="prefetch" href="/assets/js/89.7d9cb78b.js"><link rel="prefetch" href="/assets/js/9.40722af3.js"><link rel="prefetch" href="/assets/js/90.31875659.js"><link rel="prefetch" href="/assets/js/91.6be253a0.js"><link rel="prefetch" href="/assets/js/92.db3fd2c0.js"><link rel="prefetch" href="/assets/js/93.0eae35a1.js"><link rel="prefetch" href="/assets/js/94.3068fcfa.js"><link rel="prefetch" href="/assets/js/95.0aa43f4e.js"><link rel="prefetch" href="/assets/js/96.5dd378f0.js"><link rel="prefetch" href="/assets/js/97.f475d7a5.js"><link rel="prefetch" href="/assets/js/98.c7b425d3.js"><link rel="prefetch" href="/assets/js/99.91630bf2.js">
    <link rel="stylesheet" href="/assets/css/0.styles.15972595.css">
  </head>
  <body class="theme-mode-light">
    <div id="app" data-server-rendered="true"><div class="theme-container sidebar-open have-rightmenu have-body-img"><header class="navbar blur"><div title="目录" class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/img/logo.png" alt="仲灏小栈" class="logo"> <span class="site-name can-hide">仲灏小栈</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><a href="/web/" class="nav-link">大前端</a></div><div class="nav-item"><a href="/backend-opt/" class="nav-link">后端&amp;运维</a></div><div class="nav-item"><a href="/other-tech/" class="nav-link">其他</a></div><div class="nav-item"><a href="/tech-live/" class="nav-link">生活</a></div><div class="nav-item"><a href="/about/" class="nav-link">关于我</a></div><div class="nav-item"><a href="/favorite/" class="nav-link">收藏</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="索引" class="dropdown-title"><a href="/archives/" class="link-title">索引</a> <span class="title" style="display:none;">索引</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/" class="nav-link">分类</a></li><li class="dropdown-item"><!----> <a href="/tags/" class="nav-link">标签</a></li><li class="dropdown-item"><!----> <a href="/archives/" class="nav-link">归档</a></li></ul></div></div> <a href="https://github.com/izhaong" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar-hover-trigger"></div> <aside class="sidebar" style="display:none;"><div class="blogger"><img src="https://cdn.jsdelivr.net/gh/izhaong/izhaong.com-oss/site-data/avatar/avatar-wx.jpg"> <div class="blogger-info"><h3>仲灏</h3> <span>诚意, 正心, 格物, 致知</span></div></div> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><a href="/web/" class="nav-link">大前端</a></div><div class="nav-item"><a href="/backend-opt/" class="nav-link">后端&amp;运维</a></div><div class="nav-item"><a href="/other-tech/" class="nav-link">其他</a></div><div class="nav-item"><a href="/tech-live/" class="nav-link">生活</a></div><div class="nav-item"><a href="/about/" class="nav-link">关于我</a></div><div class="nav-item"><a href="/favorite/" class="nav-link">收藏</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="索引" class="dropdown-title"><a href="/archives/" class="link-title">索引</a> <span class="title" style="display:none;">索引</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/" class="nav-link">分类</a></li><li class="dropdown-item"><!----> <a href="/tags/" class="nav-link">标签</a></li><li class="dropdown-item"><!----> <a href="/archives/" class="nav-link">归档</a></li></ul></div></div> <a href="https://github.com/izhaong" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>Java</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/pages/7e33b1/" class="sidebar-link">java初学者maven项目建立</a></li><li><a href="/pages/560807/" class="sidebar-link">Maven学习笔记</a></li><li><a href="/pages/b4e72c/" aria-current="page" class="active sidebar-link">开源的物联网平台thingsboard部署</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/b4e72c/#服务器准备工作" class="sidebar-link">服务器准备工作</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/b4e72c/#安装postgresql" class="sidebar-link">安装postgresql</a></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#为-docker配置远程连接" class="sidebar-link">为 docker配置远程连接</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#本地准备工作" class="sidebar-link">本地准备工作</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/b4e72c/#导入项目文件夹" class="sidebar-link">导入项目文件夹</a></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#修改数据库地址" class="sidebar-link">修改数据库地址</a></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#安装打个包看一下" class="sidebar-link">安装打个包看一下</a></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#运行server" class="sidebar-link">运行server</a></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#连接远程docker" class="sidebar-link">连接远程docker</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/b4e72c/#遇到的错误处理" class="sidebar-link">遇到的错误处理</a></li></ul></li><li><a href="/pages/3eb92e/" class="sidebar-link">Docker 学习</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Docker</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Nacos</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>数据库</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Nginx</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Linux</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Git</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>其他</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <div><main class="page"><div class="theme-vdoing-wrapper "><div class="articleInfo-wrap" data-v-0c557b5e><div class="articleInfo" data-v-0c557b5e><ul class="breadcrumbs" data-v-0c557b5e><li data-v-0c557b5e><a href="/" title="首页" class="iconfont icon-home router-link-active" data-v-0c557b5e></a></li> <li data-v-0c557b5e><a href="/backend-opt/#后端&amp;运维" data-v-0c557b5e>后端&amp;运维</a></li><li data-v-0c557b5e><a href="/backend-opt/#Java" data-v-0c557b5e>Java</a></li></ul> <div class="info" data-v-0c557b5e><div title="作者" class="author iconfont icon-touxiang" data-v-0c557b5e><a href="https://github.com/izhaong" target="_blank" title="作者" class="beLink" data-v-0c557b5e>仲灏</a></div> <div title="创建时间" class="date iconfont icon-riqi" data-v-0c557b5e><a href="javascript:;" data-v-0c557b5e>2021-12-30</a></div> <!----></div></div></div> <!----> <div class="content-wrapper"><div class="right-menu-wrapper"><div class="right-menu-margin"><div class="right-menu-content"></div></div></div> <h1><img src="">开源的物联网平台thingsboard部署<!----></h1> <!----> <div class="theme-vdoing-content content__default"><h2 id="服务器准备工作"><a href="#服务器准备工作" class="header-anchor">#</a> 服务器准备工作</h2> <ul><li><p>centos 7</p></li> <li><p>docker</p></li> <li><p>docker-compose</p></li> <li><p>暂时关闭防火墙</p></li></ul> <p><em>部署过程中遇到的问题我也在最后的目录中记录下来了  感谢东哥解惑</em></p> <hr> <h3 id="安装postgresql"><a href="#安装postgresql" class="header-anchor">#</a> 安装postgresql</h3> <ul><li>创建<code>/opt/docker/docker-compose.yml</code> 文件</li></ul> <div class="language-dockerfile line-numbers-mode"><pre class="language-dockerfile"><code>version: '3.5'
services:
  timescaledb:
    image: timescale/timescaledb:1.7.1-pg12
    container_name: basic-timescaledb
    restart: unless-stopped
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: *****
    volumes:
      - ./data:/var/lib/postgresql/data
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><ul><li><p>跑一下 <code>docker-compose up</code></p></li> <li><ul><li>如果 容器运行起来了 就可以用 Navicat Premium 连接一下</li> <li><img src="https://cdn.jsdelivr.net/gh/izhaong/izhaong.com-oss/blogImg/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/2021/12/30/13-37-14-16bba435c77c4040c6f6b65bbb1f5144-1602302360856-197da256-9c6d-40bc-ada2-c52778bf980c-0eab20.png" alt="img"></li></ul></li> <li><ul><li>连接成功后创建数据库 <code>thingsboard</code>(名字随便起)</li></ul></li></ul> <h3 id="为-docker配置远程连接"><a href="#为-docker配置远程连接" class="header-anchor">#</a> 为 docker配置远程连接</h3> <ul><li><p>(https://blog.csdn.net/po__oq/article/details/106229575)</p></li> <li><ul><li>通过<code>daemon.json</code>配置</li></ul></li></ul> <p>编辑<code>/etc/docker/daemon.json</code></p> <div class="language-plain line-numbers-mode"><pre class="language-plain"><code>{
	&quot;hosts&quot;: [&quot;unix:///var/run/docker.sock&quot;, &quot;tcp://0.0.0.0:2375&quot;]
}
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p><strong>或者</strong></p> <ul><li><ul><li>通过systemd配置文件</li></ul></li></ul> <p>创建配置文件<code>/etc/systemd/system/docker.service.d/docker.conf</code></p> <div class="language-plain line-numbers-mode"><pre class="language-plain"><code>[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><ul><li><ul><li>保存文件<code>sudo systemctl daemon-reload</code></li> <li>重启docker<code>sudo systemctl restart docker.service</code></li></ul></li> <li><ul><li>查看是否开启端口<code>sudo netstat -lntp | grep dockerd</code></li></ul></li></ul> <div class="language-plain line-numbers-mode"><pre class="language-plain"><code>tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><ul><li><ul><li>docker cli 测试<code>docker -H :2375 ps</code></li></ul></li></ul> <div class="language-plain line-numbers-mode"><pre class="language-plain"><code>CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><hr> <h2 id="本地准备工作"><a href="#本地准备工作" class="header-anchor">#</a> 本地准备工作</h2> <ul><li><p>仓库地址 https://github.com/thingsboard/thingsboard.git (3.1.1)</p></li> <li><p>编辑器IDE https://www.jetbrains.com/zh-cn/idea/ (2020.1)</p></li> <li><p>Java环境 jdk1.8</p></li> <li><p>Navicat Premium</p></li></ul> <hr> <h3 id="导入项目文件夹"><a href="#导入项目文件夹" class="header-anchor">#</a> 导入项目文件夹</h3> <ul><li><p>若代码显示飘红有错误提示 建议安装插件 **Lombok (**https://juejin.im/post/6844903557016076302)</p></li> <li><ul><li>*Lombok是一款好用顺手的工具，就像Google Guava一样，在此予以强烈推荐，每一个Java工程师都应该使用它。<em><em><strong>Lombok是一种Java™实用工具，可用来帮助开发人员消除Java的冗长代码，尤其是对于简单的Java对象（POJO）。它通过注释实现这一目的*</strong></em>。通过在开发环境中实现Lombok，开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种accessor和mutator的大量时间。</em></li></ul></li></ul> <h3 id="修改数据库地址"><a href="#修改数据库地址" class="header-anchor">#</a> 修改数据库地址</h3> <ul><li><ul><li>打开文件<code>application/src/main/resources</code></li></ul></li></ul> <div class="language-java line-numbers-mode"><pre class="language-java"><code># SQL DAO <span class="token class-name">Configuration</span>
spring<span class="token operator">:</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
  datasource<span class="token operator">:</span>
    driverClassName<span class="token operator">:</span> <span class="token string">&quot;${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}&quot;</span>
    url<span class="token operator">:</span> <span class="token string">&quot;${SPRING_DATASOURCE_URL:jdbc:postgresql://192.168.9.30:5432/thingsboard}&quot;</span> <span class="token comment">// thingsboard名字与数据库名字一致</span>
    username<span class="token operator">:</span> <span class="token string">&quot;${SPRING_DATASOURCE_USERNAME:postgres}&quot;</span>
    password<span class="token operator">:</span> <span class="token string">&quot;${SPRING_DATASOURCE_PASSWORD:******}&quot;</span>
    hikari<span class="token operator">:</span>
      maximumPoolSize<span class="token operator">:</span> <span class="token string">&quot;${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:16}&quot;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><h3 id="安装打个包看一下"><a href="#安装打个包看一下" class="header-anchor">#</a> 安装打个包看一下</h3> <p><img src="/Users/izhaong/izhaong/Blog/izhaong.com-localFile/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/1602301728641-39a66288-e16f-41e7-a4c9-f0554a271e85.png" alt="img"></p> <p><strong>......(时间比较久, 我们就先处理下服务器)</strong></p> <hr> <hr> <p><em>这时我们回来再看本地项目</em></p> <p><img src="/Users/izhaong/izhaong/Blog/izhaong.com-localFile/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/1602308563236-b98e2f80-8494-42dd-b75a-92fd49389511.png" alt="img"></p> <h3 id="运行server"><a href="#运行server" class="header-anchor">#</a> 运行server</h3> <div class="language- line-numbers-mode"><pre class="language-text"><code>*application/src/main/java/org.thingsboard.server/ThingsbaordServerApplication*
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><p><em>若出现错误</em></p> <p><img src="/Users/izhaong/izhaong/Blog/izhaong.com-localFile/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/1602308679076-6510a399-5a15-4fe9-8e57-20b3d056a398.png" alt="img"></p> <p>修改项目下 <code>.idea\workspace.xml</code>，找到标签 <code>&lt;component name=&quot;PropertiesComponent&quot;&gt;</code> ， 在标签里加一行 <code>&lt;property name=&quot;dynamic.classpath&quot; value=&quot;true&quot; /&gt;</code>重新再跑下</p> <p>在本地浏览器中打开: http://localhost:8080/ 显示登录页面表示你已经成功在本地跑起来了</p> <p><em>接下来就是放在服务器上</em></p> <h3 id="连接远程docker"><a href="#连接远程docker" class="header-anchor">#</a> 连接远程docker</h3> <p><em>前面做了服务端docker具备远程连接的工作, 现在在本地配置并连接</em></p> <ul><li>配置</li></ul> <p>编辑<code>msa/tb/docker-postgre</code>文件夹下<code>logback.xml</code></p> <div class="language-java line-numbers-mode"><pre class="language-java"><code><span class="token operator">&lt;</span><span class="token operator">!</span>DOCTYPE configuration<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>configuration scan<span class="token operator">=</span><span class="token string">&quot;true&quot;</span> scanPeriod<span class="token operator">=</span><span class="token string">&quot;10 seconds&quot;</span><span class="token operator">&gt;</span>

    <span class="token operator">&lt;</span>appender name<span class="token operator">=</span><span class="token string">&quot;fileLogAppender&quot;</span>
              <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;</span><span class="token operator">&gt;</span>
        <span class="token generics"><span class="token punctuation">&lt;</span>file<span class="token punctuation">&gt;</span></span><span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>log<span class="token operator">/</span>thingsboard<span class="token operator">/</span>thingsboard<span class="token punctuation">.</span>log<span class="token operator">&lt;</span><span class="token operator">/</span>file<span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span>rollingPolicy
                <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">&quot;ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy&quot;</span><span class="token operator">&gt;</span>
            <span class="token generics"><span class="token punctuation">&lt;</span>fileNamePattern<span class="token punctuation">&gt;</span></span><span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>log<span class="token operator">/</span>thingsboard<span class="token operator">/</span>thingsboard<span class="token punctuation">.</span>%d<span class="token punctuation">{</span>yyyy<span class="token operator">-</span>MM<span class="token operator">-</span>dd<span class="token punctuation">}</span><span class="token punctuation">.</span>%i<span class="token punctuation">.</span>log<span class="token operator">&lt;</span><span class="token operator">/</span>fileNamePattern<span class="token operator">&gt;</span>
            <span class="token generics"><span class="token punctuation">&lt;</span>maxFileSize<span class="token punctuation">&gt;</span></span><span class="token number">100</span>MB<span class="token operator">&lt;</span><span class="token operator">/</span>maxFileSize<span class="token operator">&gt;</span>
            <span class="token generics"><span class="token punctuation">&lt;</span>maxHistory<span class="token punctuation">&gt;</span></span><span class="token number">30</span><span class="token operator">&lt;</span><span class="token operator">/</span>maxHistory<span class="token operator">&gt;</span>
            <span class="token generics"><span class="token punctuation">&lt;</span>totalSizeCap<span class="token punctuation">&gt;</span></span><span class="token number">3</span>GB<span class="token operator">&lt;</span><span class="token operator">/</span>totalSizeCap<span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span><span class="token operator">/</span>rollingPolicy<span class="token operator">&gt;</span>
        <span class="token generics"><span class="token punctuation">&lt;</span>encoder<span class="token punctuation">&gt;</span></span>
            <span class="token generics"><span class="token punctuation">&lt;</span>pattern<span class="token punctuation">&gt;</span></span><span class="token operator">%</span>d<span class="token punctuation">{</span>ISO8601<span class="token punctuation">}</span> <span class="token punctuation">[</span><span class="token operator">%</span>thread<span class="token punctuation">]</span> <span class="token operator">%</span><span class="token operator">-</span><span class="token number">5l</span>evel <span class="token operator">%</span>logger<span class="token punctuation">{</span><span class="token number">36</span><span class="token punctuation">}</span> <span class="token operator">-</span> <span class="token operator">%</span>msg<span class="token operator">%</span>n<span class="token operator">&lt;</span><span class="token operator">/</span>pattern<span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span><span class="token operator">/</span>encoder<span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>appender<span class="token operator">&gt;</span>

    <span class="token operator">&lt;</span>appender name<span class="token operator">=</span><span class="token string">&quot;STDOUT&quot;</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">&quot;ch.qos.logback.core.ConsoleAppender&quot;</span><span class="token operator">&gt;</span>
        <span class="token generics"><span class="token punctuation">&lt;</span>encoder<span class="token punctuation">&gt;</span></span>
            <span class="token generics"><span class="token punctuation">&lt;</span>pattern<span class="token punctuation">&gt;</span></span><span class="token operator">%</span>d<span class="token punctuation">{</span>ISO8601<span class="token punctuation">}</span> <span class="token punctuation">[</span><span class="token operator">%</span>thread<span class="token punctuation">]</span> <span class="token operator">%</span><span class="token operator">-</span><span class="token number">5l</span>evel <span class="token operator">%</span>logger<span class="token punctuation">{</span><span class="token number">36</span><span class="token punctuation">}</span> <span class="token operator">-</span> <span class="token operator">%</span>msg<span class="token operator">%</span>n<span class="token operator">&lt;</span><span class="token operator">/</span>pattern<span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span><span class="token operator">/</span>encoder<span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>appender<span class="token operator">&gt;</span>

    <span class="token operator">&lt;</span>logger name<span class="token operator">=</span><span class="token string">&quot;org.thingsboard.server&quot;</span> level<span class="token operator">=</span><span class="token string">&quot;INFO&quot;</span> <span class="token operator">/</span><span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span>logger name<span class="token operator">=</span><span class="token string">&quot;com.microsoft.azure.servicebus.primitives.CoreMessageReceiver&quot;</span> level<span class="token operator">=</span><span class="token string">&quot;OFF&quot;</span> <span class="token operator">/</span><span class="token operator">&gt;</span>

    <span class="token operator">&lt;</span>root level<span class="token operator">=</span><span class="token string">&quot;INFO&quot;</span><span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span>appender<span class="token operator">-</span>ref ref<span class="token operator">=</span><span class="token string">&quot;fileLogAppender&quot;</span><span class="token operator">/</span><span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span>appender<span class="token operator">-</span>ref ref<span class="token operator">=</span><span class="token string">&quot;STDOUT&quot;</span><span class="token operator">/</span><span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>root<span class="token operator">&gt;</span>

<span class="token operator">&lt;</span><span class="token operator">/</span>configuration<span class="token operator">&gt;</span>
<span class="token class-name">ENV</span> SPRING_JPA_DATABASE_PLATFORM<span class="token operator">=</span><span class="token class-name"><span class="token namespace">org<span class="token punctuation">.</span>hibernate<span class="token punctuation">.</span>dialect<span class="token punctuation">.</span></span>PostgreSQLDialect</span>
<span class="token class-name">ENV</span> SPRING_DRIVER_CLASS_NAME<span class="token operator">=</span><span class="token class-name"><span class="token namespace">org<span class="token punctuation">.</span>postgresql<span class="token punctuation">.</span></span>Driver</span>
<span class="token class-name">ENV</span> SPRING_DATASOURCE_URL<span class="token operator">=</span>jdbc<span class="token operator">:</span>postgresql<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span><span class="token number">192.168</span><span class="token number">.9</span><span class="token number">.31</span><span class="token operator">:</span><span class="token number">5432</span><span class="token operator">/</span>thingsboard
<span class="token class-name">ENV</span> SPRING_DATASOURCE_USERNAME<span class="token operator">=</span>$<span class="token punctuation">{</span>pkg<span class="token punctuation">.</span>user<span class="token punctuation">}</span>
<span class="token class-name">ENV</span> SPRING_DATASOURCE_PASSWORD<span class="token operator">=</span><span class="token operator">*</span><span class="token operator">*</span><span class="token operator">*</span><span class="token operator">*</span><span class="token operator">*</span><span class="token operator">*</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br></div></div><p><img src="/Users/izhaong/izhaong/Blog/izhaong.com-localFile/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/1602310699264-bd27d149-f73a-4fc3-a7d3-eea69e9d738b.png" alt="img"></p> <ul><li><em>远程地址</em></li></ul> <p><img src="https://cdn.jsdelivr.net/gh/izhaong/izhaong.com-oss/blogImg/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/2021/12/30/13-37-04-a30d86b2d6faa764af5111f8b87e8cdc-1602311262218-ff0d397d-3c9f-439c-a0e7-f12c0c09f0be-538aec.png" alt="img"></p> <ul><li><em>镜像</em></li></ul> <p><img src="https://cdn.jsdelivr.net/gh/izhaong/izhaong.com-oss/blogImg/020150.%E5%BC%80%E6%BA%90%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0thingsboard%E9%83%A8%E7%BD%B2/2021/12/30/13-37-08-2d53da26eef36594fee2e18495751a9b-1602311418694-f27adc6a-3d29-4cbb-a919-75b490833aed-c4cf43.png" alt="img"></p> <ul><li>最后<code>shift+f10</code> run 下docker</li></ul> <h2 id="遇到的错误处理"><a href="#遇到的错误处理" class="header-anchor">#</a> 遇到的错误处理</h2> <ul><li><p>chmod: changing permissions of ‘/var/lib/postgresql/data’: Permission denied</p></li> <li><ul><li>发现此内容可解决chmod问题：<a href="http://stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker" target="_blank" rel="noopener noreferrer">http<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> :</li></ul></li></ul> <p><a href="http://stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker" target="_blank" rel="noopener noreferrer">//stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <p>也可以在此处查看selinux安全问题：<a href="https://docs.docker.com/engine/tutorials/dockervolumes/#/volume-labels" target="_blank" rel="noopener noreferrer">https<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> :</p> <p><a href="https://docs.docker.com/engine/tutorials/dockervolumes/#/volume-labels" target="_blank" rel="noopener noreferrer">//docs.docker.com/engine/tutorials/dockervolumes/#/volume-labels<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <p>我通过在volume命令末尾添加：z修复了docker-compose文件</p> <p>volumes: - /media/dataDemo/db:/var/lib/postgresql/data:z</p> <p>volumes: :Z的含义</p> <p>docker-compose.yml举例：</p> <p>volumes:</p> <p>- /mnt/db:/var/lib/db:Z</p> <p>如果宿主机开启了SELinux，如果不加“:Z”，会报错权限不足：Permission denied。</p> <p>这涉及到label权限的问题。</p> <p>默认情况下docker会打上label: svirt_sandbox_file_t。</p> <p>宿主机上需要mount的目录，此时需要打上同样的label：</p> <p>使用:z相当于执行语句：</p> <p>chcon -Rt svirt_sandbox_file_t /var/db</p> <p>使用:Z相当于宿主机打上了docker里的所有label。</p> <p>参考：</p> <p>http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/</p> <ul><li>Caused by: java.net.SocketTimeoutException: connect timed out</li></ul> <p>配置远程连接</p> <ul><li>docker Failed to restart docker.service: Unit not found.</li></ul> <p>新版本需要docker.socket</p> <ul><li><ul><li>卸载docker，再重新安装，即可出现docker.socket</li> <li>创建一个/usr/lib/systemd/system/docker.socket文件，然后systemctl daemon-reload，最后systemctl start docker.service，即可启动成功。</li></ul></li> <li><p>ERROR: for timescaledb  Cannot start service timescaledb: Unknown runtime specified docker-runc</p></li></ul> <p>​    ERROR: Encountered errors while bringing up the project.</p> <ul><li><ul><li>关闭前停止容器</li></ul></li> <li><p>driver failed programming external connectivity on endpoint</p></li> <li><ul><li>docker服务启动时定义的自定义链DOCKER由于 centos7 firewall 被清掉, firewall的底层是使用iptables进行数据过滤，建立在iptables之上，这可能会与 Docker 产生冲突。当 <code>firewalld</code> 启动或者重启的时候，将会从 iptables 中移除 <code>DOCKER</code> 的规则，从而影响了 Docker 的正常工作。当你使用的是 Systemd 的时候， <code>firewalld</code> 会在 Docker 之前启动，但是如果你在 Docker 启动之后再启动 或者重启 <code>firewalld</code> ，你就需要重启 Docker 进程了。重启docker服务及可重新生成自定义链DOCKER</li></ul></li></ul></div></div> <!----> <div class="page-edit"><!----> <!----> <div class="last-updated"><span class="prefix">上次更新:</span> <span class="time">2021/12/30, 13:46:48</span></div></div> <div class="page-nav-wapper"><div class="page-nav-centre-wrap"><a href="/pages/560807/" class="page-nav-centre page-nav-centre-prev"><div class="tooltip">Maven学习笔记</div></a> <a href="/pages/3eb92e/" class="page-nav-centre page-nav-centre-next"><div class="tooltip">Docker 学习</div></a></div> <div class="page-nav"><p class="inner"><span class="prev">
        ←
        <a href="/pages/560807/" class="prev">Maven学习笔记</a></span> <span class="next"><a href="/pages/3eb92e/">Docker 学习</a>→
      </span></p></div></div></div> <div class="article-list"><div class="article-title"><a href="/archives/" class="iconfont icon-bi">最近更新</a></div> <div class="article-wrapper"><dl><dd>01</dd> <dt><a href="/pages/749ce2/"><div>
            css 变量使用
            <!----></div></a> <span class="date">01-26</span></dt></dl><dl><dd>02</dd> <dt><a href="/pages/9ee936/"><div>
            js 精准和模糊获取dom
            <!----></div></a> <span class="date">01-26</span></dt></dl><dl><dd>03</dd> <dt><a href="/pages/2a8bd5/"><div>
            在 Javascript 和 Sass（或 CSS！）之间共享变量的方法
            <!----></div></a> <span class="date">01-25</span></dt></dl> <dl><dd></dd> <dt><a href="/archives/" class="more">更多文章&gt;</a></dt></dl></div></div></main></div> <div class="footer"><div class="icons"><a href="mailto:izhaong@outlook.com" title="发邮件" target="_blank" class="iconfont icon-youjian"></a><a href="https://github.com/izhaong" title="GitHub" target="_blank" class="iconfont icon-github"></a><a href="https://music.163.com/#/playlist?id=755597173" title="听音乐" target="_blank" class="iconfont icon-erji"></a></div> 
  Theme by
  <a href="https://github.com/xugaoyi/vuepress-theme-vdoing" target="_blank" title="本站主题">Vdoing</a> 
    | Copyright © 2021-2022
    <span>izhaong | <a href="https://github.com/izhaong" target="_blank">github</a> | <a href="http://beian.miit.gov.cn/" target="_blank">蜀ICP备2021031194号</a></span></div> <div class="buttons"><div title="返回顶部" class="button blur go-to-top iconfont icon-fanhuidingbu" style="display:none;"></div> <div title="去评论" class="button blur go-to-comment iconfont icon-pinglun" style="display:none;"></div> <div title="主题模式" class="button blur theme-mode-but iconfont icon-zhuti"><ul class="select-box" style="display:none;"><li class="iconfont icon-zidong">
          跟随系统
        </li><li class="iconfont icon-rijianmoshi">
          浅色模式
        </li><li class="iconfont icon-yejianmoshi">
          深色模式
        </li><li class="iconfont icon-yuedu">
          阅读模式
        </li></ul></div></div> <div class="body-bg" style="background:url() center center / cover no-repeat;opacity:0.5;"></div> <!----> <!----></div><div class="global-ui"><div></div></div></div>
    <script src="/assets/js/app.2005d9cf.js" defer></script><script src="/assets/js/2.26fadcea.js" defer></script><script src="/assets/js/61.bbb7862b.js" defer></script>
  </body>
</html>
